Computing systems and associated networks have revolutionized the way human beings work, play, and communicate. Nearly every aspect of our lives is affected in some way by computing systems. It is important to the designers, engineers and customers of the software that such software functions as intended. Accordingly, prior to shipment, software often undergoes rigorous testing so as to preferably detect faults prior to shipment. If defects are found after shipment, the default can be fixed via a software update.
The capabilities of computing systems has expanded greatly in recent years, with vast improvements processing, storage, and bandwidth capabilities. Along with such improvements, the complexity of software has vastly increased. Furthermore, collaboration between computing systems has increased with each computing system perhaps playing a role in a complex network of computing systems.
Testing of software in the face of computing complexity is likewise difficult. Nevertheless, it is critically important that software be tested to be sure that it functions as intended. Testing has conventionally involved running a variety of scenarios to see if the software functioned as intended. However, with the complexity of software ever growing, the number of possible scenarios that software may encounter explodes seemingly exponentially. Accordingly, it is quite a task for a tester to run through such scenarios even if the tester could contemplate the variety of scenarios that the computing system might encounter. Thus, conventionally, the testing of software has recently become more automated.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.